package com.jabm.cmaq.delegate.impl;

import java.util.Date;
import java.util.List;


import com.jabm.cmaq.delegate.interfaces.IDelegateCMaq;
import com.jabm.cmaq.modelo.CMaqFrenteTrabajo;
import com.jabm.cmaq.modelo.CMaqHerHistorico;
import com.jabm.cmaq.modelo.CMaqHerramientas;
import com.jabm.cmaq.modelo.CMaqMaquinas;
import com.jabm.cmaq.modelo.CMaqUsuarios;
import com.jabm.cmaq.negocio.interfaces.ICMaqFrenteTrabajoManager;
import com.jabm.cmaq.negocio.interfaces.ICMaqHerHistoricoManager;
import com.jabm.cmaq.negocio.interfaces.ICMaqHerramientasManager;
import com.jabm.cmaq.negocio.interfaces.ICMaqMaquinasManager;
import com.jabm.cmaq.negocio.interfaces.ICMaqUsuariosManager;

/**
 *  Capa delegate para dar servicio a la parte vista.
 *  Copyright: Copyright (c) 2014
 *  Company:
 *  @author jabastias
 *  @version 1.0
 */
public class DelegateCMaqImpl implements IDelegateCMaq {
	    
	/**
	 * Interface para gestionar Herramientas
	 */
	private ICMaqHerramientasManager iHerramientaManager;
	
	/**
     * Interface para gestionar Maquinas
     */
	private ICMaqMaquinasManager iMaquinaManager;
	
	/**
     * Interface para gestionar Frentes de Trabajo
     */
	private ICMaqFrenteTrabajoManager iFrenteTrabajoManager;

	/**
     * Interface para gestionar Frentes de Trabajo
     */
	private ICMaqUsuariosManager iUsuariosManager;
	
	/**
     * Interface para gestionar Frentes de Trabajo
     */
	private ICMaqHerHistoricoManager iHistoricoManager;
	
	/* (non-Javadoc)
	 * @see com.jabm.cmaq.delegate.interfaces.IDelegateCMaq#insertarMaquina(com.jabm.cmaq.modelo.CMaqMaquinas)
	 */
	public void insertarMaquina(CMaqMaquinas maquina) {
		this.iMaquinaManager.insertarMaquina(maquina);
	}

	/* (non-Javadoc)
	 * @see com.jabm.cmaq.delegate.interfaces.IDelegateCMaq#modificarMaquina(com.jabm.cmaq.modelo.CMaqMaquinas)
	 */
	public void modificarMaquina(CMaqMaquinas maquina) {
		this.iMaquinaManager.modificarMaquina(maquina);
		
	}

	/* (non-Javadoc)
	 * @see com.jabm.cmaq.delegate.interfaces.IDelegateCMaq#borrarMaquina(com.jabm.cmaq.modelo.CMaqMaquinas)
	 */
	public void borrarMaquina(CMaqMaquinas maquina) {
		this.iMaquinaManager.borrarMaquina(maquina);
		
	}

	/* (non-Javadoc)
	 * @see com.jabm.cmaq.delegate.interfaces.IDelegateCMaq#buscarMaquina(int)
	 */
	public CMaqMaquinas buscarMaquina(int id) {
		return this.iMaquinaManager.buscarMaquina(id);
		
	}

	/* (non-Javadoc)
	 * @see com.jabm.cmaq.delegate.interfaces.IDelegateCMaq#listarTodasMaquinas()
	 */
	public List<CMaqMaquinas> listarTodasMaquinas() {
		return this.iMaquinaManager.listarTodosMaquinas(); 
	}

	/* (non-Javadoc)
	 * @see com.jabm.cmaq.delegate.interfaces.IDelegateCMaq#insertarFrenteTrabajo(com.jabm.cmaq.modelo.CMaqFrenteTrabajo)
	 */
	public void insertarFrenteTrabajo(CMaqFrenteTrabajo frente) {
		this.iFrenteTrabajoManager.insertarFrenteTrabajo(frente);		
	}

	/* (non-Javadoc)
	 * @see com.jabm.cmaq.delegate.interfaces.IDelegateCMaq#modificarFrenteTrabajo(com.jabm.cmaq.modelo.CMaqFrenteTrabajo)
	 */
	public void modificarFrenteTrabajo(CMaqFrenteTrabajo frente) {
		this.iFrenteTrabajoManager.modificarFrenteTrabajo(frente);
		
	}

	/* (non-Javadoc)
	 * @see com.jabm.cmaq.delegate.interfaces.IDelegateCMaq#borrarFrenteTrabajo(com.jabm.cmaq.modelo.CMaqFrenteTrabajo)
	 */
	public void borrarFrenteTrabajo(CMaqFrenteTrabajo frente) {
	    this.iFrenteTrabajoManager.borrarFrenteTrabajo(frente);
		
	}

	/* (non-Javadoc)
	 * @see com.jabm.cmaq.delegate.interfaces.IDelegateCMaq#buscarFrenteTrabajo(int)
	 */
	public CMaqFrenteTrabajo buscarFrenteTrabajo(int id) {
		
		return this.iFrenteTrabajoManager.buscarFrenteTrabajo(id);
	}

	/* (non-Javadoc)
	 * @see com.jabm.cmaq.delegate.interfaces.IDelegateCMaq#listarTodosFrenteTrabajo()
	 */
	public List<CMaqFrenteTrabajo> listarTodosFrenteTrabajo() {
			return this.iFrenteTrabajoManager.listarTodosFrenteTrabajo();
	}

	/* (non-Javadoc)
	 * @see com.jabm.cmaq.delegate.interfaces.IDelegateCMaq#insertarHerramienta(com.jabm.cmaq.modelo.CMaqHerramientas)
	 */
	public void insertarHerramienta(CMaqHerramientas herramienta) {
		this.iHerramientaManager.insertarHerramientas(herramienta);
		
	}

	/* (non-Javadoc)
	 * @see com.jabm.cmaq.delegate.interfaces.IDelegateCMaq#modificarHerramienta(com.jabm.cmaq.modelo.CMaqHerramientas)
	 */
	public void modificarHerramienta(CMaqHerramientas herramienta) {
		this.iHerramientaManager.modificarHerramientas(herramienta);
		
	}

	/* (non-Javadoc)
	 * @see com.jabm.cmaq.delegate.interfaces.IDelegateCMaq#borrarHerramienta(com.jabm.cmaq.modelo.CMaqHerramientas)
	 */
	public void borrarHerramienta(CMaqHerramientas herramienta) {
		this.iHerramientaManager.borrarHerramientas(herramienta);
    }

	/* (non-Javadoc)
	 * @see com.jabm.cmaq.delegate.interfaces.IDelegateCMaq#buscarHerramienta(int)
	 */
	public CMaqHerramientas buscarHerramienta(int id) {
		return this.iHerramientaManager.buscarHerramientas(id);
	}
	
	/* (non-Javadoc)
	 * @see com.jabm.cmaq.delegate.interfaces.IDelegateCMaq#listarTodosHerramientas()
	 */
	public List<CMaqHerramientas> listarTodosHerramientas() {
	      return this.iHerramientaManager.listarTodasHerramientas();
	}


	/* (non-Javadoc)
	 * @see com.jabm.cmaq.delegate.interfaces.IDelegateCMaq#listarTodosUsuarios()
	 */
	public List<CMaqUsuarios> listarTodosUsuarios() {
	      return this.iUsuariosManager.listarTodosUsuarios();
	}

	
	/* (non-Javadoc)
	 * @see com.jabm.cmaq.delegate.interfaces.IDelegateCMaq#insertarUsuario(com.jabm.cmaq.modelo.CMaqUsuarios)
	 */
	public void insertarUsuario(CMaqUsuarios usu) {
		this.iUsuariosManager.insertarUsuarios(usu);
		
	}
	
	/* (non-Javadoc)
	 * @see com.jabm.cmaq.delegate.interfaces.IDelegateCMaq#modificarUsuarios(com.jabm.cmaq.modelo.CMaqUsuarios)
	 */
	public void modificarUsuarios(CMaqUsuarios usu) {
		this.iUsuariosManager.modificarUsuario(usu);
		
	}

	/* (non-Javadoc)
	 * @see com.jabm.cmaq.delegate.interfaces.IDelegateCMaq#borrarUsuario(com.jabm.cmaq.modelo.CMaqUsuarios)
	 */
	public void borrarUsuario(CMaqUsuarios usu) {
		this.iUsuariosManager.borrarUsuario(usu);
    }
	
	/* (non-Javadoc)
	 * @see com.jabm.cmaq.delegate.interfaces.IDelegateCMaq#buscarUsuario(int)
	 */
	public CMaqUsuarios buscarUsuario(int id) {
		return this.iUsuariosManager.buscarUsuario(id);
	}

	
	/* (non-Javadoc)
	 * @see com.jabm.cmaq.delegate.interfaces.IDelegateCMaq#filtrar(com.jabm.cmaq.modelo.CMaqUsuarios)
	 */
	public List<CMaqUsuarios> filtrarUsuario(CMaqUsuarios usu) {
		return this.iUsuariosManager.filtrar(usu);
	}
	
	/* (non-Javadoc)
	 * @see com.jabm.cmaq.delegate.interfaces.IDelegateCMaq#filtrarMaquinas(com.jabm.cmaq.modelo.CMaqMaquinas)
	 */
	@Override
	public List<CMaqMaquinas> filtrarMaquinas(CMaqMaquinas maquina) {
		
		return this.iMaquinaManager.filtrarMaquinas(maquina);
	}

	/* (non-Javadoc)
	 * @see com.jabm.cmaq.delegate.interfaces.IDelegateCMaq#filtrarHerramientas(com.jabm.cmaq.modelo.CMaqHerramientas)
	 */
	@Override
	public List<CMaqHerramientas> filtrarHerramientas(
			CMaqHerramientas herramienta) {
		
		return this.iHerramientaManager.filtrarHerramientas(herramienta);
	}

	/* (non-Javadoc)
	 * @see com.jabm.cmaq.delegate.interfaces.IDelegateCMaq#updateEstadoHerramienta(java.lang.String, java.lang.String)
	 */
	@Override
	public boolean updateEstadoHerramientaMaq(String codigo, String estado, Date fecha, String codUsuario) {
	   
		CMaqUsuarios usu = new CMaqUsuarios();		
		boolean result = Boolean.FALSE;
		usu.setEmployeeCode(codUsuario);		
	    CMaqHerHistorico hermaq = new CMaqHerHistorico();

		List<CMaqUsuarios> listUsuarios = iUsuariosManager.filtrar(usu);
		
		if(this.iHerramientaManager.updateEstadoHerramienta(codigo, estado, fecha, listUsuarios.get(0))){
		    
			CMaqHerramientas her = new CMaqHerramientas();
			her.setCodigo(codigo);
			List<CMaqHerramientas> listHer = iHerramientaManager.filtrarHerramientas(her);			
			hermaq.setcMaqUsuario(listUsuarios.get(0));
		    hermaq.setEstado(estado);
		    hermaq.setCodigo(codigo);
		    hermaq.setFecha(fecha);
		    if(listHer != null && listHer.get(0) != null){
		    	hermaq.setNombre(listHer.get(0).getNombre());
		    	hermaq.setcMaqFrenteTrabajo(listHer.get(0).getcMaqFrenteTrabajo());
		    }
		    hermaq.setTipo("HER");
		    
		    iHistoricoManager.insertarMaqHers(hermaq);	    
			result = Boolean.TRUE;
		}
		
		if(this.iMaquinaManager.updateEstadoMaquina(codigo, estado, fecha,  listUsuarios.get(0))){
			
			CMaqMaquinas maq = new CMaqMaquinas();
			maq.setCodigo(codigo);
			List<CMaqMaquinas> listMaq = iMaquinaManager.filtrarMaquinas(maq);
		    
			if(listMaq != null && listMaq.get(0) != null){

			    hermaq.setcMaqFrenteTrabajo(listMaq.get(0).getcMaqFrenteTrabajo());
			    hermaq.setNombre(listMaq.get(0).getNombre());
			
			}
			hermaq.setcMaqUsuario(listUsuarios.get(0));
		    hermaq.setEstado(estado);
		    hermaq.setCodigo(codigo);
		    hermaq.setFecha(fecha);
		    hermaq.setTipo("MAQ");
		    iHistoricoManager.insertarMaqHers(hermaq);
			result = Boolean.TRUE;

		}
		
		
		return result;
		
		
	}
	
	
	/* (non-Javadoc)
	 * @see com.jabm.cmaq.delegate.interfaces.IDelegateCMaq#insertarFrenteTrabajo(com.jabm.cmaq.modelo.CMaqFrenteTrabajo)
	 */
	public void insertarMaqHerHistorico(CMaqHerHistorico maqHer) {
		this.iHistoricoManager.insertarMaqHers(maqHer);		
	}

	/* (non-Javadoc)
	 * @see com.jabm.cmaq.delegate.interfaces.IDelegateCMaq#modificarFrenteTrabajo(com.jabm.cmaq.modelo.CMaqFrenteTrabajo)
	 */
	public void modificarMaqHerHistorico(CMaqHerHistorico maqHer) {
		this.iHistoricoManager.modificarMaqHers(maqHer);
		
	}

	/* (non-Javadoc)
	 * @see com.jabm.cmaq.delegate.interfaces.IDelegateCMaq#borrarFrenteTrabajo(com.jabm.cmaq.modelo.CMaqFrenteTrabajo)
	 */
	public void borrarMaqHerHistorico(CMaqHerHistorico maqHer) {
	    this.iHistoricoManager.borrarMaqHers(maqHer);
		
	}

	/* (non-Javadoc)
	 * @see com.jabm.cmaq.delegate.interfaces.IDelegateCMaq#buscarFrenteTrabajo(int)
	 */
	public CMaqHerHistorico buscarMaqHerHistorico(int id) {
		
		return this.iHistoricoManager.buscarMaqHers(id);
	}

	/* (non-Javadoc)
	 * @see com.jabm.cmaq.delegate.interfaces.IDelegateCMaq#listarTodosFrenteTrabajo()
	 */
	public List<CMaqHerHistorico> listarTodosMaqHerHistorico() {
			return this.iHistoricoManager.listarTodasMaqHers();
	}
	
	/* (non-Javadoc)
	 * @see com.jabm.cmaq.delegate.interfaces.IDelegateCMaq#listarTodosFrenteTrabajo()
	 */
	public List<CMaqHerHistorico> filtrarMaqHer(CMaqHerHistorico cmaqh) {
			return this.iHistoricoManager.filtrarMaqHer(cmaqh);
	}	


	/**
	 * @return the iHerramientaManager
	 */
	public ICMaqHerramientasManager getiHerramientaManager() {
		return iHerramientaManager;
	}

	/**
	 * @param iHerramientaManager the iHerramientaManager to set
	 */
	public void setiHerramientaManager(ICMaqHerramientasManager iHerramientaManager) {
		this.iHerramientaManager = iHerramientaManager;
	}

	/**
	 * @return the iMaquinaManager
	 */
	public ICMaqMaquinasManager getiMaquinaManager() {
		return iMaquinaManager;
	}

	/**
	 * @param iMaquinaManager the iMaquinaManager to set
	 */
	public void setiMaquinaManager(ICMaqMaquinasManager iMaquinaManager) {
		this.iMaquinaManager = iMaquinaManager;
	}

	/**
	 * @return the iFrenteTrabajoManager
	 */
	public ICMaqFrenteTrabajoManager getiFrenteTrabajoManager() {
		return iFrenteTrabajoManager;
	}

	/**
	 * @param iFrenteTrabajoManager the iFrenteTrabajoManager to set
	 */
	public void setiFrenteTrabajoManager(
			ICMaqFrenteTrabajoManager iFrenteTrabajoManager) {
		this.iFrenteTrabajoManager = iFrenteTrabajoManager;
	}

	/**
	 * @return the iUsuariosManager
	 */
	public ICMaqUsuariosManager getiUsuariosManager() {
		return iUsuariosManager;
	}

	/**
	 * @param iUsuariosManager the iUsuariosManager to set
	 */
	public void setiUsuariosManager(ICMaqUsuariosManager iUsuariosManager) {
		this.iUsuariosManager = iUsuariosManager;
	}

	/**
	 * @return the iHistoricoManager
	 */
	public ICMaqHerHistoricoManager getiHistoricoManager() {
		return iHistoricoManager;
	}

	/**
	 * @param iHistoricoManager the iHistoricoManager to set
	 */
	public void setiHistoricoManager(ICMaqHerHistoricoManager iHistoricoManager) {
		this.iHistoricoManager = iHistoricoManager;
	}



	


}
